﻿using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
using Wallpaper.Data.SeedData;
using Wallpaper.Models.Entities;

namespace Wallpaper.Data.Configurations
{
    public class MenuConfiguration : IEntityTypeConfiguration<Menu>
    {
        public void Configure(EntityTypeBuilder<Menu> builder)
        {
            // 表名配置
            builder.ToTable("menus");

            // 主键配置
            builder.HasKey(m => m.Id);

            // 字段配置
            builder.Property(m => m.Id)
                .IsRequired()
                .HasMaxLength(36)
                .HasComment("菜单主键ID");

            builder.Property(m => m.Name)
                .IsRequired()
                .HasMaxLength(50)
                .HasColumnType("nvarchar(50)")
                .HasComment("菜单名称");

            builder.Property(m => m.Path)
                .HasMaxLength(200)
                .HasColumnType("varchar(200)")
                .IsRequired(false)
                .HasComment("路由路径");

            builder.Property(m => m.Icon)
                .HasMaxLength(50)
                .HasColumnType("varchar(50)")
                .HasComment("菜单图标");

            builder.Property(m => m.Component)
                .HasMaxLength(200)
                .HasColumnType("varchar(200)")
                .IsRequired(false)
                .HasComment("组件路径");

            builder.Property(m => m.Sort)
                .IsRequired()
                .HasDefaultValue(0)
                .HasComment("排序号");

            builder.Property(m => m.ParentId)
                .HasMaxLength(36)
                .IsRequired(false)
                .HasComment("父级菜单ID");

            builder.Property(m => m.IsEnabled)
                .IsRequired()
                .HasDefaultValue(true)
                .HasComment("启用状态");

            builder.Property(m => m.IsDeleted)
                .IsRequired()
                .HasDefaultValue(false)
                .HasComment("软删除标志");

            builder.Property(m => m.CreatedAt)
                .IsRequired()
                .HasDefaultValueSql("GETDATE()")
                .HasComment("创建时间");

            builder.Property(m => m.UpdatedAt)
                .HasComment("更新时间");

            // 索引配置
            builder.HasIndex(m => m.ParentId)
                .HasDatabaseName("IX_Menu_ParentId");

            builder.HasIndex(m => new { m.IsEnabled, m.Sort })
                .HasDatabaseName("IX_Menu_Enabled_Sort");

            builder.HasIndex(m => m.Path)
                .HasDatabaseName("IX_Menu_Path");

            // 自引用关系配置（菜单树）
            builder.HasOne(m => m.Parent)
                .WithMany(m => m.Children)
                .HasForeignKey(m => m.ParentId)
                .OnDelete(DeleteBehavior.Restrict);

            // 数据种子
            builder.HasData(MenuSeedData.GetSeedData());
        }
    }
}
